home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / AIAT / Examples / Sources / RamStoreStream / RamStoreStream.cp < prev    next >
Encoding:
Text File  |  1998-04-16  |  2.1 KB  |  92 lines  |  [TEXT/CWIE]

  1. // RamStoreStream.cp
  2. //    Copyright:    © 1994 - 1998 by Apple Computer, Inc., all rights reserved.
  3.  
  4.  
  5. // Implements IAStoreStream using ram
  6. //
  7. // **** use with "BetterHandleStream.cp" for controllable buffer growth rate
  8.  
  9. // Note that this doesn't ever delete the stream you give it, so you can re-use
  10. // the ram in subsequent instantiations of this class.
  11.  
  12. #include "RamStoreStream.h"
  13. #include <string.h>
  14. #include <LHandleStream.h>// powerplant stream class
  15.  
  16. RamStoreStream::RamStoreStream( LHandleStream* _myStream) {
  17.     myStream = _myStream;
  18.     am_open = false;
  19. }
  20.  
  21. RamStoreStream::~RamStoreStream() {
  22. }
  23.  
  24. void RamStoreStream::Initialize() {
  25. }
  26.  
  27. void RamStoreStream::Open(bool writeable) {
  28.     am_open = true;
  29. }
  30.  
  31. bool RamStoreStream::IsOpen() {
  32.     return am_open;
  33. }
  34.  
  35. void RamStoreStream::Flush() {
  36.     MaybeFlushBuffer();    
  37. }
  38.  
  39. uint32 RamStoreStream::GetEOF() {
  40.     return myStream->GetLength();
  41. }
  42.  
  43. void RamStoreStream::SetEOF(uint32 address) {
  44.     IAAssert(false);
  45. }
  46.  
  47.  
  48. void RamStoreStream::Write(uint32 address, const byte* data, uint32 length)
  49. {
  50.     uint32 old_stream_length = myStream->GetLength();
  51.  
  52.     if (address > old_stream_length)
  53.     {
  54.         myStream->SetMarker(0,streamFrom_End);        
  55.         // here's a cheesy, inefficient way to zero the stream out w/out accessing it's internals
  56.         
  57.         Ptr zeros = NewPtrClear(address - old_stream_length);
  58.         IAThrowIfNot(zeros, StoreFull);
  59.         myStream->WriteData(&zeros,address - old_stream_length);
  60.         DisposePtr(zeros);
  61.         
  62.         IAThrowIfNot( myStream->GetLength() >= address, StoreFull);
  63.     }
  64.     myStream->SetMarker(address,streamFrom_Start);
  65.     IAThrowIfNot(myStream->GetMarker() == address, StoreError);
  66.     Int32 bytes_written = myStream->WriteData(data, length);
  67.     IAThrowIfNot( bytes_written == length, StoreFull);
  68. }
  69.  
  70. uint32 RamStoreStream::Read(uint32 address, byte* data,  uint32 length)
  71. {
  72.     myStream->SetMarker(address,streamFrom_Start);    
  73.     return myStream->ReadData(data, length);    
  74. }
  75.  
  76. bool RamStoreStream::IsWritable( void )
  77. {
  78.     return true;
  79. }
  80.  
  81. IAStoreStream *RamStoreStream::Clone(void)
  82. {
  83.     throw new IAException("RamStoreStream::Clone not implemented");
  84.     return NULL;
  85. }
  86.  
  87.  
  88. //void RamStoreStream::SetFileType(char* name) {}
  89.  
  90.  
  91.  
  92.